home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / nss / pkim.h < prev    next >
C/C++ Source or Header  |  2006-04-20  |  16KB  |  727 lines

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3.  *
  4.  * The contents of this file are subject to the Mozilla Public License Version
  5.  * 1.1 (the "License"); you may not use this file except in compliance with
  6.  * the License. You may obtain a copy of the License at
  7.  * http://www.mozilla.org/MPL/
  8.  *
  9.  * Software distributed under the License is distributed on an "AS IS" basis,
  10.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11.  * for the specific language governing rights and limitations under the
  12.  * License.
  13.  *
  14.  * The Original Code is the Netscape security libraries.
  15.  *
  16.  * The Initial Developer of the Original Code is
  17.  * Netscape Communications Corporation.
  18.  * Portions created by the Initial Developer are Copyright (C) 1994-2000
  19.  * the Initial Developer. All Rights Reserved.
  20.  *
  21.  * Contributor(s):
  22.  *
  23.  * Alternatively, the contents of this file may be used under the terms of
  24.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  25.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  26.  * in which case the provisions of the GPL or the LGPL are applicable instead
  27.  * of those above. If you wish to allow use of your version of this file only
  28.  * under the terms of either the GPL or the LGPL, and not to allow others to
  29.  * use your version of this file under the terms of the MPL, indicate your
  30.  * decision by deleting the provisions above and replace them with the notice
  31.  * and other provisions required by the GPL or the LGPL. If you do not delete
  32.  * the provisions above, a recipient may use your version of this file under
  33.  * the terms of any one of the MPL, the GPL or the LGPL.
  34.  *
  35.  * ***** END LICENSE BLOCK ***** */
  36.  
  37. #ifndef PKIM_H
  38. #define PKIM_H
  39.  
  40. #ifdef DEBUG
  41. static const char PKIM_CVS_ID[] = "@(#) $RCSfile: pkim.h,v $ $Revision: 1.27 $ $Date: 2005/06/27 21:50:06 $";
  42. #endif /* DEBUG */
  43.  
  44. #ifndef BASE_H
  45. #include "base.h"
  46. #endif /* BASE_H */
  47.  
  48. #ifndef PKI_H
  49. #include "pki.h"
  50. #endif /* PKI_H */
  51.  
  52. #ifndef PKITM_H
  53. #include "pkitm.h"
  54. #endif /* PKITM_H */
  55.  
  56. PR_BEGIN_EXTERN_C
  57.  
  58. /* nssPKIObject
  59.  *
  60.  * This is the base object class, common to all PKI objects defined in
  61.  * in this module.  Each object can be safely 'casted' to an nssPKIObject,
  62.  * then passed to these methods.
  63.  *
  64.  * nssPKIObject_Create
  65.  * nssPKIObject_Destroy
  66.  * nssPKIObject_AddRef
  67.  * nssPKIObject_AddInstance
  68.  * nssPKIObject_HasInstance
  69.  * nssPKIObject_GetTokens
  70.  * nssPKIObject_GetNicknameForToken
  71.  * nssPKIObject_RemoveInstanceForToken
  72.  * nssPKIObject_DeleteStoredObject
  73.  */
  74.  
  75. /* nssPKIObject_Create
  76.  *
  77.  * A generic PKI object.  It must live in a trust domain.  It may be
  78.  * initialized with a token instance, or alternatively in a crypto context.
  79.  */
  80. NSS_EXTERN nssPKIObject *
  81. nssPKIObject_Create
  82. (
  83.   NSSArena *arenaOpt,
  84.   nssCryptokiObject *instanceOpt,
  85.   NSSTrustDomain *td,
  86.   NSSCryptoContext *ccOpt
  87. );
  88.  
  89. /* nssPKIObject_AddRef
  90.  */
  91. NSS_EXTERN nssPKIObject *
  92. nssPKIObject_AddRef
  93. (
  94.   nssPKIObject *object
  95. );
  96.  
  97. /* nssPKIObject_Destroy
  98.  *
  99.  * Returns true if object was destroyed.  This notifies the subclass that
  100.  * all references are gone and it should delete any members it owns.
  101.  */
  102. NSS_EXTERN PRBool
  103. nssPKIObject_Destroy
  104. (
  105.   nssPKIObject *object
  106. );
  107.  
  108. /* nssPKIObject_AddInstance
  109.  *
  110.  * Add a token instance to the object, if it does not have it already.
  111.  */
  112. NSS_EXTERN PRStatus
  113. nssPKIObject_AddInstance
  114. (
  115.   nssPKIObject *object,
  116.   nssCryptokiObject *instance
  117. );
  118.  
  119. /* nssPKIObject_HasInstance
  120.  *
  121.  * Query the object for a token instance.
  122.  */
  123. NSS_EXTERN PRBool
  124. nssPKIObject_HasInstance
  125. (
  126.   nssPKIObject *object,
  127.   nssCryptokiObject *instance
  128. );
  129.  
  130. /* nssPKIObject_GetTokens
  131.  *
  132.  * Get all tokens which have an instance of the object.
  133.  */
  134. NSS_EXTERN NSSToken **
  135. nssPKIObject_GetTokens
  136. (
  137.   nssPKIObject *object,
  138.   PRStatus *statusOpt
  139. );
  140.  
  141. /* nssPKIObject_GetNicknameForToken
  142.  *
  143.  * tokenOpt == NULL means take the first available, otherwise return the
  144.  * nickname for the specified token.
  145.  */
  146. NSS_EXTERN NSSUTF8 *
  147. nssPKIObject_GetNicknameForToken
  148. (
  149.   nssPKIObject *object,
  150.   NSSToken *tokenOpt
  151. );
  152.  
  153. /* nssPKIObject_RemoveInstanceForToken
  154.  *
  155.  * Remove the instance of the object on the specified token.
  156.  */
  157. NSS_EXTERN PRStatus
  158. nssPKIObject_RemoveInstanceForToken
  159. (
  160.   nssPKIObject *object,
  161.   NSSToken *token
  162. );
  163.  
  164. /* nssPKIObject_DeleteStoredObject
  165.  *
  166.  * Delete all token instances of the object, as well as any crypto context
  167.  * instances (TODO).  If any of the instances are read-only, or if the
  168.  * removal fails, the object will keep those instances.  'isFriendly' refers
  169.  * to the object -- can this object be removed from a friendly token without
  170.  * login?  For example, certificates are friendly, private keys are not.
  171.  * Note that if the token is not friendly, authentication will be required
  172.  * regardless of the value of 'isFriendly'.
  173.  */
  174. NSS_EXTERN PRStatus
  175. nssPKIObject_DeleteStoredObject
  176. (
  177.   nssPKIObject *object,
  178.   NSSCallback *uhh,
  179.   PRBool isFriendly
  180. );
  181.  
  182. #ifdef NSS_3_4_CODE
  183. NSS_EXTERN nssCryptokiObject **
  184. nssPKIObject_GetInstances
  185. (
  186.   nssPKIObject *object
  187. );
  188. #endif
  189.  
  190. NSS_EXTERN NSSCertificate **
  191. nssTrustDomain_FindCertificatesByID
  192. (
  193.   NSSTrustDomain *td,
  194.   NSSItem *id,
  195.   NSSCertificate **rvOpt,
  196.   PRUint32 maximumOpt,
  197.   NSSArena *arenaOpt
  198. );
  199.  
  200. NSS_EXTERN NSSCRL **
  201. nssTrustDomain_FindCRLsBySubject
  202. (
  203.   NSSTrustDomain *td,
  204.   NSSDER *subject
  205. );
  206.  
  207. /* module-private nsspki methods */
  208.  
  209. NSS_EXTERN NSSCryptoContext *
  210. nssCryptoContext_Create
  211. (
  212.   NSSTrustDomain *td,
  213.   NSSCallback *uhhOpt
  214. );
  215.  
  216. /* XXX for the collection */
  217. NSS_EXTERN NSSCertificate *
  218. nssCertificate_Create
  219. (
  220.   nssPKIObject *object
  221. );
  222.  
  223. NSS_EXTERN PRStatus
  224. nssCertificate_SetCertTrust
  225. (
  226.   NSSCertificate *c,
  227.   NSSTrust *trust
  228. );
  229.  
  230. NSS_EXTERN nssDecodedCert *
  231. nssCertificate_GetDecoding
  232. (
  233.   NSSCertificate *c
  234. );
  235.  
  236. extern PRIntn
  237. nssCertificate_SubjectListSort
  238. (
  239.   void *v1,
  240.   void *v2
  241. );
  242.  
  243. NSS_EXTERN nssDecodedCert *
  244. nssDecodedCert_Create
  245. (
  246.   NSSArena *arenaOpt,
  247.   NSSDER *encoding,
  248.   NSSCertificateType type
  249. );
  250.  
  251. NSS_EXTERN PRStatus
  252. nssDecodedCert_Destroy
  253. (
  254.   nssDecodedCert *dc
  255. );
  256.  
  257. NSS_EXTERN NSSTrust *
  258. nssTrust_Create
  259. (
  260.   nssPKIObject *object,
  261.   NSSItem *certData
  262. );
  263.  
  264. NSS_EXTERN NSSCRL *
  265. nssCRL_Create
  266. (
  267.   nssPKIObject *object
  268. );
  269.  
  270. NSS_EXTERN NSSCRL *
  271. nssCRL_AddRef
  272. (
  273.   NSSCRL *crl
  274. );
  275.  
  276. NSS_EXTERN PRStatus
  277. nssCRL_Destroy
  278. (
  279.   NSSCRL *crl
  280. );
  281.  
  282. NSS_EXTERN PRStatus
  283. nssCRL_DeleteStoredObject
  284. (
  285.   NSSCRL *crl,
  286.   NSSCallback *uhh
  287. );
  288.  
  289. NSS_EXTERN NSSPrivateKey *
  290. nssPrivateKey_Create
  291. (
  292.   nssPKIObject *o
  293. );
  294.  
  295. NSS_EXTERN NSSDER *
  296. nssCRL_GetEncoding
  297. (
  298.   NSSCRL *crl
  299. );
  300.  
  301. NSS_EXTERN NSSPublicKey *
  302. nssPublicKey_Create
  303. (
  304.   nssPKIObject *object
  305. );
  306.  
  307. /* nssCertificateArray
  308.  *
  309.  * These are being thrown around a lot, might as well group together some
  310.  * functionality.
  311.  *
  312.  * nssCertificateArray_Destroy
  313.  * nssCertificateArray_Join
  314.  * nssCertificateArray_FindBestCertificate
  315.  * nssCertificateArray_Traverse
  316.  */
  317.  
  318. /* nssCertificateArray_Destroy
  319.  *
  320.  * Will destroy the array and the certs within it.  If the array was created
  321.  * in an arena, will *not* (of course) destroy the arena.  However, is safe
  322.  * to call this method on an arena-allocated array.
  323.  */
  324. NSS_EXTERN void
  325. nssCertificateArray_Destroy
  326. (
  327.   NSSCertificate **certs
  328. );
  329.  
  330. /* nssCertificateArray_Join
  331.  *
  332.  * Join two arrays into one.  The two arrays, certs1 and certs2, should
  333.  * be considered invalid after a call to this function (they may be destroyed
  334.  * as part of the join).  certs1 and/or certs2 may be NULL.  Safe to
  335.  * call with arrays allocated in an arena, the result will also be in the
  336.  * arena.
  337.  */
  338. NSS_EXTERN NSSCertificate **
  339. nssCertificateArray_Join
  340. (
  341.   NSSCertificate **certs1,
  342.   NSSCertificate **certs2
  343. );
  344.  
  345. /* nssCertificateArray_FindBestCertificate
  346.  *
  347.  * Use the usual { time, usage, policies } to find the best cert in the
  348.  * array.
  349.  */
  350. NSS_EXTERN NSSCertificate * 
  351. nssCertificateArray_FindBestCertificate
  352. (
  353.   NSSCertificate **certs, 
  354.   NSSTime *timeOpt,
  355.   const NSSUsage *usage,
  356.   NSSPolicies *policiesOpt
  357. );
  358.  
  359. /* nssCertificateArray_Traverse
  360.  *
  361.  * Do the callback for each cert, terminate the traversal if the callback
  362.  * fails.
  363.  */
  364. NSS_EXTERN PRStatus
  365. nssCertificateArray_Traverse
  366. (
  367.   NSSCertificate **certs,
  368.   PRStatus (* callback)(NSSCertificate *c, void *arg),
  369.   void *arg
  370. );
  371.  
  372. NSS_EXTERN void
  373. nssCRLArray_Destroy
  374. (
  375.   NSSCRL **crls
  376. );
  377.  
  378. /* nssPKIObjectCollection
  379.  *
  380.  * This is a handy way to group objects together and perform operations
  381.  * on them.  It can also handle "proto-objects"-- references to
  382.  * objects instances on tokens, where the actual object hasn't 
  383.  * been formed yet.
  384.  *
  385.  * nssCertificateCollection_Create
  386.  * nssPrivateKeyCollection_Create
  387.  * nssPublicKeyCollection_Create
  388.  *
  389.  * If this was a language that provided for inheritance, each type would
  390.  * inherit all of the following methods.  Instead, there is only one
  391.  * type (nssPKIObjectCollection), shared among all.  This may cause
  392.  * confusion; an alternative would be to define all of the methods
  393.  * for each subtype (nssCertificateCollection_Destroy, ...), but that doesn't
  394.  * seem worth the code bloat..  It is left up to the caller to remember 
  395.  * what type of collection he/she is dealing with.
  396.  *
  397.  * nssPKIObjectCollection_Destroy
  398.  * nssPKIObjectCollection_Count
  399.  * nssPKIObjectCollection_AddObject
  400.  * nssPKIObjectCollection_AddInstances
  401.  * nssPKIObjectCollection_Traverse
  402.  *
  403.  * Back to type-specific methods.
  404.  *
  405.  * nssPKIObjectCollection_GetCertificates
  406.  * nssPKIObjectCollection_GetCRLs
  407.  * nssPKIObjectCollection_GetPrivateKeys
  408.  * nssPKIObjectCollection_GetPublicKeys
  409.  */
  410.  
  411. /* nssCertificateCollection_Create
  412.  *
  413.  * Create a collection of certificates in the specified trust domain.
  414.  * Optionally provide a starting set of certs.
  415.  */
  416. NSS_EXTERN nssPKIObjectCollection *
  417. nssCertificateCollection_Create
  418. (
  419.   NSSTrustDomain *td,
  420.   NSSCertificate **certsOpt
  421. );
  422.  
  423. /* nssCRLCollection_Create
  424.  *
  425.  * Create a collection of CRLs/KRLs in the specified trust domain.
  426.  * Optionally provide a starting set of CRLs.
  427.  */
  428. NSS_EXTERN nssPKIObjectCollection *
  429. nssCRLCollection_Create
  430. (
  431.   NSSTrustDomain *td,
  432.   NSSCRL **crlsOpt
  433. );
  434.  
  435. /* nssPrivateKeyCollection_Create
  436.  *
  437.  * Create a collection of private keys in the specified trust domain.
  438.  * Optionally provide a starting set of keys.
  439.  */
  440. NSS_EXTERN nssPKIObjectCollection *
  441. nssPrivateKeyCollection_Create
  442. (
  443.   NSSTrustDomain *td,
  444.   NSSPrivateKey **pvkOpt
  445. );
  446.  
  447. /* nssPublicKeyCollection_Create
  448.  *
  449.  * Create a collection of public keys in the specified trust domain.
  450.  * Optionally provide a starting set of keys.
  451.  */
  452. NSS_EXTERN nssPKIObjectCollection *
  453. nssPublicKeyCollection_Create
  454. (
  455.   NSSTrustDomain *td,
  456.   NSSPublicKey **pvkOpt
  457. );
  458.  
  459. /* nssPKIObjectCollection_Destroy
  460.  */
  461. NSS_EXTERN void
  462. nssPKIObjectCollection_Destroy
  463. (
  464.   nssPKIObjectCollection *collection
  465. );
  466.  
  467. /* nssPKIObjectCollection_Count
  468.  */
  469. NSS_EXTERN PRUint32
  470. nssPKIObjectCollection_Count
  471. (
  472.   nssPKIObjectCollection *collection
  473. );
  474.  
  475. NSS_EXTERN PRStatus
  476. nssPKIObjectCollection_AddObject
  477. (
  478.   nssPKIObjectCollection *collection,
  479.   nssPKIObject *object
  480. );
  481.  
  482. /* nssPKIObjectCollection_AddInstances
  483.  *
  484.  * Add a set of object instances to the collection.  The instances
  485.  * will be sorted into any existing certs/proto-certs that may be in
  486.  * the collection.  The instances will be absorbed by the collection,
  487.  * the array should not be used after this call (except to free it).
  488.  *
  489.  * Failure means the collection is in an invalid state.
  490.  *
  491.  * numInstances = 0 means the array is NULL-terminated
  492.  */
  493. NSS_EXTERN PRStatus
  494. nssPKIObjectCollection_AddInstances
  495. (
  496.   nssPKIObjectCollection *collection,
  497.   nssCryptokiObject **instances,
  498.   PRUint32 numInstances
  499. );
  500.  
  501. /* nssPKIObjectCollection_Traverse
  502.  */
  503. NSS_EXTERN PRStatus
  504. nssPKIObjectCollection_Traverse
  505. (
  506.   nssPKIObjectCollection *collection,
  507.   nssPKIObjectCallback *callback
  508. );
  509.  
  510. /* This function is being added for NSS 3.5.  It corresponds to the function
  511.  * nssToken_TraverseCertificates.  The idea is to use the collection during
  512.  * a traversal, creating certs each time a new instance is added for which
  513.  * a cert does not already exist.
  514.  */
  515. NSS_EXTERN PRStatus
  516. nssPKIObjectCollection_AddInstanceAsObject
  517. (
  518.   nssPKIObjectCollection *collection,
  519.   nssCryptokiObject *instance
  520. );
  521.  
  522. /* nssPKIObjectCollection_GetCertificates
  523.  *
  524.  * Get all of the certificates in the collection. 
  525.  */
  526. NSS_EXTERN NSSCertificate **
  527. nssPKIObjectCollection_GetCertificates
  528. (
  529.   nssPKIObjectCollection *collection,
  530.   NSSCertificate **rvOpt,
  531.   PRUint32 maximumOpt,
  532.   NSSArena *arenaOpt
  533. );
  534.  
  535. NSS_EXTERN NSSCRL **
  536. nssPKIObjectCollection_GetCRLs
  537. (
  538.   nssPKIObjectCollection *collection,
  539.   NSSCRL **rvOpt,
  540.   PRUint32 maximumOpt,
  541.   NSSArena *arenaOpt
  542. );
  543.  
  544. NSS_EXTERN NSSPrivateKey **
  545. nssPKIObjectCollection_GetPrivateKeys
  546. (
  547.   nssPKIObjectCollection *collection,
  548.   NSSPrivateKey **rvOpt,
  549.   PRUint32 maximumOpt,
  550.   NSSArena *arenaOpt
  551. );
  552.  
  553. NSS_EXTERN NSSPublicKey **
  554. nssPKIObjectCollection_GetPublicKeys
  555. (
  556.   nssPKIObjectCollection *collection,
  557.   NSSPublicKey **rvOpt,
  558.   PRUint32 maximumOpt,
  559.   NSSArena *arenaOpt
  560. );
  561.  
  562. NSS_EXTERN NSSTime *
  563. NSSTime_Now
  564. (
  565.   NSSTime *timeOpt
  566. );
  567.  
  568. NSS_EXTERN NSSTime *
  569. NSSTime_SetPRTime
  570. (
  571.   NSSTime *timeOpt,
  572.   PRTime prTime
  573. );
  574.  
  575. NSS_EXTERN PRTime
  576. NSSTime_GetPRTime
  577. (
  578.   NSSTime *time
  579. );
  580.  
  581. NSS_EXTERN nssHash *
  582. nssHash_CreateCertificate
  583. (
  584.   NSSArena *arenaOpt,
  585.   PRUint32 numBuckets
  586. );
  587.  
  588. /* 3.4 Certificate cache routines */
  589.  
  590. NSS_EXTERN PRStatus
  591. nssTrustDomain_InitializeCache
  592. (
  593.   NSSTrustDomain *td,
  594.   PRUint32 cacheSize
  595. );
  596.  
  597. NSS_EXTERN PRStatus
  598. nssTrustDomain_AddCertsToCache
  599. (
  600.   NSSTrustDomain *td,
  601.   NSSCertificate **certs,
  602.   PRUint32 numCerts
  603. );
  604.  
  605. NSS_EXTERN void
  606. nssTrustDomain_RemoveCertFromCacheLOCKED (
  607.   NSSTrustDomain *td,
  608.   NSSCertificate *cert
  609. );
  610.  
  611. NSS_EXTERN void
  612. nssTrustDomain_LockCertCache (
  613.   NSSTrustDomain *td
  614. );
  615.  
  616. NSS_EXTERN void
  617. nssTrustDomain_UnlockCertCache (
  618.   NSSTrustDomain *td
  619. );
  620.  
  621. NSS_IMPLEMENT PRStatus
  622. nssTrustDomain_DestroyCache
  623. (
  624.   NSSTrustDomain *td
  625. );
  626.  
  627. /* 
  628.  * Remove all certs for the given token from the cache.  This is
  629.  * needed if the token is removed.
  630.  */
  631. NSS_EXTERN PRStatus
  632. nssTrustDomain_RemoveTokenCertsFromCache
  633. (
  634.   NSSTrustDomain *td,
  635.   NSSToken *token
  636. );
  637.  
  638. NSS_EXTERN PRStatus
  639. nssTrustDomain_UpdateCachedTokenCerts
  640. (
  641.   NSSTrustDomain *td,
  642.   NSSToken *token
  643. );
  644.  
  645. /*
  646.  * Find all cached certs with this nickname (label).
  647.  */
  648. NSS_EXTERN NSSCertificate **
  649. nssTrustDomain_GetCertsForNicknameFromCache
  650. (
  651.   NSSTrustDomain *td,
  652.   NSSUTF8 *nickname,
  653.   nssList *certListOpt
  654. );
  655.  
  656. /*
  657.  * Find all cached certs with this email address.
  658.  */
  659. NSS_EXTERN NSSCertificate **
  660. nssTrustDomain_GetCertsForEmailAddressFromCache
  661. (
  662.   NSSTrustDomain *td,
  663.   NSSASCII7 *email,
  664.   nssList *certListOpt
  665. );
  666.  
  667. /*
  668.  * Find all cached certs with this subject.
  669.  */
  670. NSS_EXTERN NSSCertificate **
  671. nssTrustDomain_GetCertsForSubjectFromCache
  672. (
  673.   NSSTrustDomain *td,
  674.   NSSDER *subject,
  675.   nssList *certListOpt
  676. );
  677.  
  678. /*
  679.  * Look for a specific cert in the cache.
  680.  */
  681. NSS_EXTERN NSSCertificate *
  682. nssTrustDomain_GetCertForIssuerAndSNFromCache
  683. (
  684.   NSSTrustDomain *td,
  685.   NSSDER *issuer,
  686.   NSSDER *serialNum
  687. );
  688.  
  689. /*
  690.  * Look for a specific cert in the cache.
  691.  */
  692. NSS_EXTERN NSSCertificate *
  693. nssTrustDomain_GetCertByDERFromCache
  694. (
  695.   NSSTrustDomain *td,
  696.   NSSDER *der
  697. );
  698.  
  699. /* Get all certs from the cache */
  700. /* XXX this is being included to make some old-style calls word, not to
  701.  *     say we should keep it
  702.  */
  703. NSS_EXTERN NSSCertificate **
  704. nssTrustDomain_GetCertsFromCache
  705. (
  706.   NSSTrustDomain *td,
  707.   nssList *certListOpt
  708. );
  709.  
  710. NSS_EXTERN void
  711. nssTrustDomain_DumpCacheInfo
  712. (
  713.   NSSTrustDomain *td,
  714.   void (* cert_dump_iter)(const void *, void *, void *),
  715.   void *arg
  716. );
  717.  
  718. NSS_EXTERN void
  719. nssCertificateList_AddReferences
  720. (
  721.   nssList *certList
  722. );
  723.  
  724. PR_END_EXTERN_C
  725.  
  726. #endif /* PKIM_H */
  727.